package data;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cons.LoginState;

public class CreatureList {

	private static final Logger logger = LoggerFactory.getLogger(CreatureList.class); 
	
	/**
	 * 所有的离线用户列表
	 */
	private static Map<String, Creature> levLst = Collections.synchronizedMap(new HashMap<String, Creature>());
	
	/**
	 * 当前在线的人
	 */
	private static Map<String, Creature> onLineLst = Collections.synchronizedMap(new HashMap<String, Creature>());
	
	/**
	 * 检查账号是否存在
	 * 1  拥有账号   密码正确
	 * 0  拥有账号    密码不正确
	 * -1  没有账号信息
	 * 2 密码正确   需要踢人下线
	 * @param accout
	 * @param key
	 * @return
	 */
	public static byte checkUser(String accout, String key)
	{
		if(levLst.containsKey(accout))
		{
			//当前用户离线
			if(levLst.get(accout).loginKey == key)
			{
				return LoginState.LOGIN_SUCCEED;
			}
			return LoginState.LOGIN_FIELD;
		}
		else if (onLineLst.containsKey(accout))
		{
			//当前用户在线
			if(onLineLst.get(accout).loginKey == key)
			{
				//密码正确
				return LoginState.LOGIN_SUCCEED_TICK;
			}
			return LoginState.LOGIN_FIELD;
		}
		return LoginState.ACCOUT_NONE;
	}
	
	/**
	 * 玩家上线
	 * 不是新创建的用户
	 * @param accout
	 */
	public static boolean userOnLine(String accout)
	{
		Creature creature = levLst.remove(accout);
		if(creature != null)
		{
			onLineLst.put(accout, creature);
			return true;
		}
		else 
		{
			logger.error(accout + "is not in levLst!! Login Error");
		}
		return false;
	}
	
	/**
	 * 玩家上线  并且玩家是新创建用户
	 * @param accout
	 * @param cre
	 */
	public static boolean userOnLine(String accout, Creature cre)
	{
		if (!onLineLst.containsKey(accout) && !levLst.containsKey(accout)) 
		{
			onLineLst.put(accout, cre);
			return true;
		}
		logger.error(accout + "is hava!!"); 
		return false;
	}
	
	/**
	 * 玩家下线
	 * @param accout
	 */
	public static void userLevLine(String accout)
	{
		Creature cre = onLineLst.get(accout);
		if(cre != null)
		{
			onLineLst.remove(accout);
			levLst.put(accout, cre);
		}
		else 
		{
			logger.error(accout + "level online! " + accout + "is not in onLineLst!");
		}
	}
	
	/**
	 * 添加不在线用户 
	 * 用于数据库初始化
	 * @param creature
	 */
	public static void addLevLineUser(Creature creature)
	{
		levLst.put(creature.accout, creature);
	}
	
}
